package be.vdab.entities;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import be.vdab.valueobjects.Adres;

@Entity
@Table(name = "brouwers")
public class Brouwer implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private long brouwerNr;
	@NotNull
	@Size(min = 1, max = 50, message = "{Size.tekst}")
	private String naam;
	@Min(0)
	private BigDecimal omzet;
	@NotNull
	@Valid
	@Embedded
	private Adres adres;
	public Brouwer(){
	}
	public Brouwer(long brouwerNr, String naam, BigDecimal omzet, Adres adres){
		this(naam, omzet,adres);
		setBrouwerNr(brouwerNr);
	}
	public Brouwer(String naam, BigDecimal omzet, Adres adres){
		setNaam(naam);
		setOmzet(omzet);
		setAdres(adres);
	}
	public long getBrouwerNr() {
		return brouwerNr;
	}
	public void setBrouwerNr(long brouwerNr) {
		this.brouwerNr = brouwerNr;
	}
	public String getNaam() {
		return naam;
	}
	public void setNaam(String naam) {
		this.naam = naam;
	}
	public BigDecimal getOmzet() {
		return omzet;
	}
	public void setOmzet(BigDecimal omzet) {
		this.omzet = omzet;
	}
	public Adres getAdres() {
		return adres;
	}
	public void setAdres(Adres adres) {
		this.adres = adres;
	}
	@Override
	public boolean equals(Object object){
		if(!(object instanceof Brouwer)){
			return false;
		}
		Brouwer ander = (Brouwer) object;
		if(naam == null){
			return ander.naam == null;
		}
		return naam.equalsIgnoreCase(ander.naam);
	}
	@Override
	public int hashCode(){
		return naam == null ? 0 : naam.toUpperCase().hashCode();
	}
	@Override
	public String toString(){
		return naam + ':' + brouwerNr;
	}
}
